{"ID":0,"Name":"MySQL Trigger update для текущей таблицы","Content":"\u003cp\u003e\nПопытался написать триггер для апдейта текущей таблицы и получил \"Can’t update table ‘tbl_name’ in stored function/trigger because it is already used by statement which invoked this stored function/trigger.\"\n\u003c/p\u003e\n\u003cp\u003eИтак начнем с начала:\u003c/p\u003e\n\u003cpre name=\"code\" class=\"sql\"\u003e\nDELIMITER $$\nUSE `db`$$\n\nCREATE TRIGGER update_modificationa_date BEFORE UPDATE ON tbl_name\nFOR EACH ROW BEGIN\n    UPDATE tbl_name SET NEW.last_mod = NOW() WHERE id = OLD.id;\nEND;\n\u003c/pre\u003e\n\u003cp\u003eТакой код естественно вернет ошибку, поскольку  можно получить так называемый  рекурсивный редирект(recursive redirect), когда апдейт дергает триггер, а триггер делает апдейт и так по кругу\u003c/p\u003e\n\u003cp\u003eРешение на самом деле простое - убрать конструкцию UPDATE\u003c/p\u003e\n\u003cpre name=\"code\" class=\"sql\"\u003e\n-- Trigger DDL Statements\nDELIMITER $$\nUSE `db`$$\n\nCREATE TRIGGER update_modificationa_date BEFORE UPDATE ON tbl_name\nFOR EACH ROW BEGIN\n    SET NEW.last_mod = NOW();\nEND;\n\u003c/pre\u003e\n","Tag":"mysql","Url":"/art/47/cant-update-table-tbl_name-in-stored-function-trigger-because-it-is-already-used-by-statement.aspx","ShortDescription":"","Alias":"","Visible":0,"Title":"MySQL Trigger update для текущей таблицы","Key":"","Description":"Как обновить триггером текущую таблицу при апдейте?"}
